<?php include ROOT . 'vendor/autoload.php';

/**
 * 导入PHPMailer类库
 */
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

// /**
//  * 示例：邮件发送的配置项
//  */
// $config = [
//     'debug'=> 0,
//     'host'=> 'smtp.qq.com',
//     'username'=> '18833245288@qq.com',
//     'password'=> 'wxicknkxbwbwdfbh',
//     'port'=> 587,
//     'from'=> [
//         'address'=> '18833245288@qq.com',
//         'name'=> '小牛管家'
//     ]
// ];

// // 示例：使用实例
// $result = Mail::send($config, '测试一下邮件发送', '这是<b>内</b>容', ['hc_coder@qq.com']);
// print_r($result);

/**
 * 邮件发送类
 */
class Mail {

    /**
     * 发送邮件
     *
     * @param Array $config 配置数组
     * @param String $subject 邮件标题
     * @param String $body 邮件内容
     * @param Array $address 接收地址
     * @return Array 
     * [
     *      ‘state'=> 'success',        // 状态可能为：success或fail
     *      'msg'=> ''                  // 状态为success时为空，状态为fail时为错误信息
     * ]
     */
    public static function send($config, $subject, $body, $address) {

        // 声明mail对象，并启用异常调试
        $mail = new PHPMailer(true);

        // 进入邮件发送过程
        try {

            // 固定属性
            
            $mail->isSMTP();                            // 使用SMTP
            $mail->isHTML(true);                        // 是否启用HTML格式的内容
            $mail->SMTPAuth = true;                     // 启用SMTP授权
            $mail->SMTPSecure = 'tls';                  // 打开tls加密
            $mail->CharSet = 'UTF-8';                   // 设置发送的邮件的编码

            // 动态单属性设置

            $mail->SMTPDebug = $config['debug'];        // 是否启用debug，生产环境下可以注释
            $mail->Host = $config['host'];              // 指定SMTP服务地址            
            $mail->Username = $config['username'];      // SMTP用户名
            $mail->Password = $config['password'];      // SMTP密码
            $mail->Port = $config['port'];              // tcp接口
            $mail->Subject = $subject;                  // 邮件主题            
            $mail->Body = $body;                        // 邮件内容
            // $mail->addAttachment('./example.pdf');   // 邮件添加附件

            // 发送者和接收人

            $mail->setFrom($config['from']['address'], $config['from']['name']);
            foreach ($address as $ak=>$av) {
                $mail->addAddress($av);
            }

            // 发送邮件
            $mail->send();

            // 发送成功
            return [
                'state'=> 'success',
                'msg'=> ''
            ];
        } 

        // 发送失败
        catch (Exception $e) {
            return [
                'state'=> 'fail',
                'msg'=> $mail->ErrorInfo
            ];
        }
    }
}